package ca.uqam.projet.service; import ca.uqam.projet.repositories.FoodTruckList; import ca.uqam.projet.resources.FoodTruck; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import org.springframework.stereotype.Component; @Component public class BDFoodTruck extends BD { private static final String INSERT_FOOD_TRUCK = "INSERT INTO foodtruck(camion, truckid)" + "VALUES (?,?)" + "ON CONFLICT(truckid)" + "DO UPDATE SET camion = EXCLUDED.camion"; private static final String SELECT_DATE = "SELECT * FROM foodtruck NATURAL JOIN pointdevente WHERE heure_debut >= ? AND heure_fin <= ? ;"; private static final String INSERT_POINT_DE_VENTE = "INSERT INTO pointdevente(truckid, lieu, longitude, latitude, heure_debut, heure_fin)" + "VALUES (?,?,?,?,?,?)" + "on conflict do nothing"; private static final String DELETE_POINT_DE_VENTE = "delete from pointdevente ;"; private static final String DELETE_FOOD_TRUCK = "delete from foodtruck ;"; private static final String TIMEZONE = "EDT 2016"; private static final String ENDTIME = " 23:59 "; public static List<FoodTruck> select(String dateDebut, String dateFin) { List<FoodTruck> list = new ArrayList<>(); PreparedStatement ps = null; Connection conn = connect(); dateFin += ENDTIME + TIMEZONE; try { ps = conn.prepareStatement(SELECT_DATE); ps.setTimestamp(1, new java.sql.Timestamp(ConvertisseurDate.stringDate(dateDebut).getTime())); ps.setTimestamp(2, new java.sql.Timestamp(ConvertisseurDate.stringTimestamp(dateFin).getTime())); ResultSet rs = ps.executeQuery(); while (rs.next()) { list.add(new FoodTruck(rs.getString("truckid"), rs.getString("camion"), rs.getString("lieu"), rs.getFloat("longitude"), rs.getFloat("latitude"), rs.getTimestamp("heure_debut"), rs.getTimestamp("heure_fin"))); } } catch (SQLException e) { System.out.println(e.getMessage()); } finally { CloseConnection(ps); } diconnect(conn); return list; } public static void insertAll(FoodTruckList foodTruckList) { Connection conn = connect(); deleteFoodTruck(conn); for (FoodTruck foodTruck : foodTruckList.getFoodTruckList()) { insertFoodTruck(foodTruck, conn); insertPointDeVente(foodTruck, conn); } diconnect(conn); } private static void insertFoodTruck(FoodTruck foodtruck, Connection conn) { PreparedStatement ps = null; try { ps = conn.prepareStatement(INSERT_FOOD_TRUCK); ps.setString(1, foodtruck.getProperties().getCamion()); ps.setString(2, foodtruck.getProperties().getTruckid()); ps.executeUpdate(); } catch (SQLException e) { System.out.println(e.getMessage()); } finally { CloseConnection(ps); } } private static void insertPointDeVente(FoodTruck foodtruck, Connection conn) { PreparedStatement ps = null; try { ps = conn.prepareStatement(INSERT_POINT_DE_VENTE); ps.setString(1, foodtruck.getProperties().getTruckid()); ps.setString(2, foodtruck.getProperties().getLieu()); ps.setFloat(3, foodtruck.getGeometry().getCoordinates()[0]); ps.setFloat(4, foodtruck.getGeometry().getCoordinates()[1]); ps.setTimestamp(5, new java.sql.Timestamp(foodtruck.getProperties().getHeureDebutDate().getTime())); ps.setTimestamp(6, new java.sql.Timestamp(foodtruck.getProperties().getHeureFinDate().getTime())); ps.executeUpdate(); } catch (SQLException e) { System.out.println(e.getMessage()); } finally { CloseConnection(ps); } } private static void deleteFoodTruck(Connection conn) { PreparedStatement ps = null; try { ps = conn.prepareStatement(DELETE_POINT_DE_VENTE); ps.executeUpdate(); ps = conn.prepareStatement(DELETE_FOOD_TRUCK); ps.executeUpdate(); } catch (SQLException e) { System.out.println(e.getMessage()); } finally { CloseConnection(ps); } } }